package com.ttg.demo;
//~--- non-JDK imports --------------------------------------------------------
import java.util.TreeMap;

import com.ttg.utils.TLinx2Util;
import com.ttg.utils.TLinxAESCoder;
import com.ttg.utils.TestParams;
import net.sf.json.JSONObject;
//~--- JDK imports ------------------------------------------------------------
//~--- classes ----------------------------------------------------------------
/**
 * Class PayOrderDemo
 * Description
 * Create 2017-04-19 15:58:31
 *
 * @author Benny.YEE
 */
public class PayOrderDemo {
  /**
   * Method queryOrderList
   * Description 说明：
   *
   * @param outNo          说明：
   * @param pmtTag         说明：
   * @param pmtName        说明：
   * @param ordName        说明：
   * @param originalAmount 说明：
   * @param discountAmount 说明：
   * @param ignoreAmount   说明：
   * @param tradeAmount    说明：
   * @param tradeAccount   说明：
   * @param tradeNo        说明：
   * @param tradeResult    说明：
   * @param remark         说明：
   * @param authCode       说明：
   * @param tag            说明：
   * @param jumpUrl        说明：
   * @param notifyUrl      说明：
   */
  private void queryOrder(String outNo, String pmtTag, String pmtName, String ordName, Integer originalAmount, Integer discountAmount, Integer ignoreAmount, Integer tradeAmount, String tradeAccount, String tradeNo, String tradeResult, String remark, String authCode, String tag, String jumpUrl, String notifyUrl) {
    // 初始化参数   时间
    // String timestamp = new Date().getTime() / 1000 + ""
    String timestamp = System.currentTimeMillis() / 1000 + "";
    try {
      // 请求参数的map
      TreeMap<String, String> postmap = new TreeMap<String, String>();
      postmap.put("open_id", TestParams.OPEN_ID);
      postmap.put("timestamp", timestamp);
      // data参数的map
      TreeMap<String, String> datamap = new TreeMap<String, String>();
      datamap.put("out_no", outNo);
      datamap.put("pmt_tag", pmtTag);
      datamap.put("pmt_name", pmtName);
      datamap.put("ord_name", ordName);
      datamap.put("original_amount", originalAmount + "");
      datamap.put("discount_amount", discountAmount + "");
      datamap.put("ignore_amount", ignoreAmount + "");
      datamap.put("trade_amount", tradeAmount + "");
      datamap.put("trade_account", tradeAccount);
      datamap.put("trade_no", tradeNo);
      datamap.put("trade_result", tradeResult);
      datamap.put("remark", remark);
      datamap.put("auth_code", authCode);
      datamap.put("tag", tag);
      datamap.put("jump_url", jumpUrl);
      datamap.put("notify_url", notifyUrl);
      /**
       * 1 data字段内容进行AES加密，再二进制转十六进制(bin2hex)
       */
      TLinx2Util.handleEncrypt(datamap, postmap);
      /**
       * 2 请求参数签名 按A~z排序，串联成字符串，先进行sha1加密(小写)，再进行md5加密(小写)，得到签名
       */
      TLinx2Util.handleSign(postmap);
      /**
       * 3 请求、响应
       */
      String rspStr = TLinx2Util.handlePost(postmap, TestParams.PAYORDER);
      System.out.println("返回字符串=" + rspStr);
      JSONObject json = JSONObject.fromObject(rspStr);
      System.out.println("返回字符串=2" + json);
      /**
       * 4 验签  有data节点时才验签
       */
      JSONObject respObject = JSONObject.fromObject(rspStr);
      Object dataStr = respObject.get("data");
      if (!rspStr.isEmpty() && (dataStr != null)) {
        if (TLinx2Util.verifySign(respObject)) {    // 验签成功
          /*5 AES解密，并hex2bin */
          String respData = TLinxAESCoder.decrypt(dataStr.toString(), TestParams.OPEN_KEY);
          System.out.println("==================响应data内容:" + respData);
          JSONObject json2 = JSONObject.fromObject(respData);
          System.out.println("响应data内容=2" + json2);
        }
        else {
          System.out.println("=====验签失败=====");
        }
      }
      else {
        System.out.println("=====没有返回data数据=====");
      }
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }
  /**
   * Method main
   * Description 说明：
   *
   * @param args 说明：
   */
  public static void main(String[] args) {
    //        new TradeDemo().queryOrder("81685230", "Weixin", null, "现金支付测试1", 1,
    //                null, null, 1, null, null, null, null,
    //                null, null, null, "http://local.ttg.cn:8400/tlinx2apidemo1/callback/scanpay_cashier/payResult");
    //        new TradeDemo().queryOrder("81685231", "Weixin", null, "现金支付测试1", 1,
    //                null, null, 1, null, null, null, null,
    //                null, null, null, "http://http://smartschool.singbon.com/silentPay/test.do");
    new PayOrderDemo().queryOrder(
      //                var outNo = '1041166516';
      //        var pmtTag = 'Weixin';
      //        var pmtName = '';
      //        var ordName = '雷锋校园卡充值';
      //        var originalAmount = '0.1';
      //        var discountAmount = '0';
      //        var ignoreAmount = '0';
      //        var tradeAmount = '0.1';
      //        var tradeAccount = '29230';
      //        var tradeNo = '1041166516';
      //        var tradeResult = '0';
      //        var remark = 'ohjLQwoPPNSziWCjaq_Dx7sM0PPk_zch支付测试';
      //        var authCode = '';
      //        var tag = '附加数据';
      //        var jumpUrl = 'www.singbon.com';
      //        var notifyUrl = 'http://smartschool.singbon.com/silentPay/test.do';
      //
      "1041166517",
      //
      "Weixin",
      //
      null,
      //
      "雷锋校园卡充值",
      //
      1,
      //
      null,
      //
      null,
      //
      1,
      //
      null,
      //
      "1041166516",
      //
      null,
      //
      null,
      //
      null,
      //
      null,
      //
      null,
      //
      "http://smartschool.singbon.com/silentPay/test.do");
  }
}
//~ Formatted by Jindent --- http://www.jindent.com
